package com.catazzz.springbootstudy.common.rabbit;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @作者: Tao
 * @日期: 2025/1/13
 * @时间: 14:23
 * @描述: WorkConsumer 类用于消费 RabbitMQ 中的 work 队列 <br><pre>
 *     该类定义了两个方法 receiveOne 和 receiveTwo，分别用于接收和处理消息
 */
@Slf4j
@Component
public class WorkConsumer {

    /**
     * 接收 RabbitMQ 中 work 队列的消息<br>
     * 该方法通过 @RabbitListener 注解监听并消费指定队列中的消息 <br><pre>
     *
     * 监听队列：queuesToDeclare = @Queue("work") 表示该方法会监听名为 "work" 的队列。
     * 容器工厂：containerFactory = "rabbitListenerContainerFactory" 指定了用于创建监听器容器的工厂类，确保消息消费的配置和管理
     *
     * @param message 接收到的消息内容
     */
    @RabbitListener(queuesToDeclare = @Queue("work"), containerFactory = "rabbitListenerContainerFactory")
    public void receiveOne(String message) {
        try {
            Thread.sleep(1000);
        } catch (Exception e){
            e.printStackTrace();
        }
        log.info("接收到消息: {},被receiveOne消费", message);
    }

    /**
     * 接收 RabbitMQ 中 work 队列的消息<br>
     * 与 receiveOne 方法类似，该方法提供另一个消费路径，以实现工作队列模式
     *
     * @param message 接收到的消息内容
     */
    @RabbitListener(queuesToDeclare = @Queue("work"), containerFactory = "rabbitListenerContainerFactory")
    public void receiveTwo(String message) {
        try {
            Thread.sleep(4000);
        } catch (Exception e){
            e.printStackTrace();
        }
        log.info("接收到消息: {},被receiveTwo消费", message);
    }
}

